
// Dart中方法也是对象，类型为Function，可以在方法中传递也可以赋值给变量
// dart不支持函数的重载
void main() {
  //调用匿名函数
  fn();
  //调用可选参数函数
  print(optMethod('slx'));
  print(optMethod('fauks', 12));
  //调用具名函数，参数前必须带参数名
  namedParamsMethod(name: "xls", address: "qd");

  //将方法赋值给一个方法类型的变量
  Function fun = printLog;
  //调用
  fun();

  //自执行方法
  ((int n) {
    print('自执行方法 $n');
  })(12);
}

//定义一个匿名方法
// ignore: top_level_function_literal_block
var fn = () {
  print('我是匿名函数');
};

//定义一个无返回值的方法，返回值类型可以省略，通过返回类型推断，不推荐使用
void log() {
  //方法中还可以定义方法，外部无法调用，但是可以调用外部方法
  int getNum() {
    return 12;
  }
}

//定义带可选参数的方法 []中的参数可传可不传，参数多的时候要注意参数的顺序
String optMethod(String name, [int age]) {
  if (age != null) {
    return "$name-$age";
  } else {
    return "$name-年龄不详";
  }
}

//定义具名函数,也可以为参数指定默认值,带默认值的参数一般放到不带默认值的参数之前
//使用@required指定 address参数必须传入
void namedParamsMethod({String name, int age = 12, String address}) {
  print("namedMethod");
}

void printLog() {
  print('print log');
}
